package org.mokusakura.service;

import org.mokusakura.domain.Category;
import org.mokusakura.domain.Item;
import org.mokusakura.domain.Product;

import java.util.List;

public interface CatalogService {

    /**
     * <p>获得而所有的Category</p>
     *
     * @return - Category List
     */
    List<Category> getCategoryList();

    /**
     * <p>根据category的id获得category
     *
     * @param categoryId - 要查询的category id
     * @return - 待查询的category
     */
    Category getCategory(String categoryId);

    /**
     * <p>根据product Id获得product</p>
     *
     * @param productId - 待查询的id
     * @return 待查询的product
     */
    Product getProduct(String productId);

    /**
     * <p>根据category id查询其底下有哪些Product</p>
     *
     * @param categoryId - 待查询的category
     * @return - 完整的product list，每一个字段都不为null，若没有product，返回应是空列表
     */
    List<Product> getProductListByCategory(String categoryId);

    /**
     * <p>查询该category id是否存在</p>
     *
     * @param categoryId - 待查询的category id
     * @return - 存在则返回true，不存在返回false
     */
    Boolean categoryIdExists(String categoryId);

    /**
     * <p>查询该product id是否存在</p>
     *
     * @param productId - 待查询的product id
     * @return - 存在返回true，不存在返回false
     */
    Boolean productIdExists(String productId);

    /**
     * <p>根据product 的id查询item list ，item.product.category为null</p>
     *
     * @param productId - 待查询的product
     * @return - item list，返回值中item.product.category为null
     */
    List<Item> getItemListByProduct(String productId);


    Item getItem(String itemId);


    List<Product> searchProductByKeyword(String keyword);


    boolean isItemInStock(String itemId);
}
